package d2_xml;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class Domo4JTest01 {
    public static void main(String[] args) throws Exception {
        //目标: 解析XML文件, 使用Dom4j框架
        //1、创建一个SaxReader解析对象 --->解析就是在程序中把XML文件中的数据都提取出来 核心对象SaxReader(有了这个解析器,才可以去读XML文件,读成一个document对象)
        SAXReader saxReader = new SAXReader();

        //2、把XML文件读成一个Document文档对象
        //注意企业中,要用try-catch
        //这个document对象就封装了整个XML文件的信息
        Document document =
                saxReader.read(
                        "javapromax\\day11-speical-" +
                                "file-log-code\\src\\Contact.xml");

        //3、文档对象中包含了XML文件的全部数据,提供了方法获取数据
        //获取根元素对象
        Element rootElement = document.getRootElement();
        //可以调用getName()获取根元素的名
        System.out.println(rootElement.getName());

        //4、提取子元素
        //得到当前元素下的所有子元素
//       List<Element> sonElement = rootElement.elements();
        //也可以指定子元素的名称,获取指定的子元素
       List<Element> sonElement = rootElement.elements("contact");
       //可以遍历所有的子元素
        for (Element element : sonElement) {
            System.out.println(element.getName());
        }

        //获取单个子元素对象
        Element userElement = rootElement.element("user");
        //获取元素下子元素的文本
        System.out.println(userElement.elementText("name"));

        //获取单个子元素对象-->如果该子元素有多个(就是名字连同的有多个)
        //默认拿第一个
        Element contactElement = rootElement.element("contact");//默认会拿到第一个,拿不到就会返回null
        System.out.println(contactElement.elementText("name"));

        //5、提取子元素的属性对象(就是所谓的键值对)
        Attribute idAttr = contactElement.attribute("id");//先拿到一个属性对象--->然后再拿属性值,与属性名
        System.out.println(idAttr.getName());
        System.out.println(idAttr.getValue());

        //直接拿属性值
        System.out.println(contactElement.attributeValue("id"));

        //6、拿文本值
        //通过父元素拿子元素对象, 在提取其文本值
        System.out.println(contactElement.elementText("name"));//参数是子元素名, 可以直接取子元素的文本
        System.out.println(contactElement.elementTextTrim("name"));//会去掉文本前后的空格

        //先拿到元素对象,在提取其文本值
        Element emailElement = contactElement.element("email");
        System.out.println(emailElement.getText());
        System.out.println(emailElement.getTextTrim()); //去掉前后空格


    }
}
